import mountElement from "./mountElement"
import createDOMElement from './createDOMElement'
import unmountNode from "./unmountNode"

/**
 * 创建 DOM 节点
 * @param {*} virtualDOM 
 * @param {*} container 
 */
export default function mountNativeElement(virtualDOM, container, oldDOM) {
  let newElement = createDOMElement(virtualDOM)
  // 判断是否有旧的 DOM
  if (oldDOM) {
    // 如果有，把新节点插入到旧节点的前面
    container.insertBefore(newElement, oldDOM)
  } else {
    // 如果没有，将转换后的 DOM 对象，放到 container 节点后
    container.appendChild(newElement)
  }
  // 判断旧的 DOM 是否存在，如果存在 删除
  if (oldDOM) {
    unmountNode(oldDOM)
  }

  // 传递组件的实例对象
  // 当组件中发生改变，可以通过这个实例对象与新的实例对象进行比对更新
  let component = virtualDOM.component
  if (component) {
    component.setDOM(newElement)
  }
}